home *** CD-ROM | disk | FTP | other *** search
/ BMUG Revelations / BMUG Revelations.toast / Programming / Programming Languages / Yerk 3.64 / Asm source / Utilities < prev   
Text File  |  1990-12-22  |  3KB  |  122 lines

  1. \ Assembler Utility Routines        Reese Warner                4/85
  2. \  09/10/85  RW   Changed auxA/D: to A/D:
  3. \  09/16/85  RW   Made >num copy out its number
  4. \  03/06/86  GDC  fixed immediate mode (>num)
  5. \  03/07/86  GDC  fixed PC modes (9 & 10) (compIdxMode) 
  6.  
  7. 0 -> dlevel
  8.  
  9. \  converts text into numbers
  10. : >num  { addr len -- n }
  11.     buf255 256 erase
  12.     addr len str255 drop
  13.     buf255 1+ c@ ascii $ =
  14.     IF
  15.        buf255 2+ c@ ascii - =
  16.        IF
  17.            0 0 buf255 c@ 1- buf255 1+ c!
  18.            buf255 2+ hex (number) decimal drop drop negate
  19.        ELSE
  20.            0 0 buf255 1+ hex (number) decimal drop drop
  21.        THEN
  22.     ELSE
  23.        buf255 1+ c@ ascii - =
  24.        IF
  25.            0 0 buf255 c@ 1- buf255 1+ c! buf255 1+ (number) drop drop negate
  26.        ELSE
  27.            0 0 buf255 (number) drop drop
  28.        THEN
  29.     THEN
  30. ;
  31.  
  32. : AsmError { errNum -- }
  33.     ." asmerror# " errNum . ." in Line number  " linect . cr
  34.     ." LINE: " tib tiblen type cr
  35.     true -> errflag
  36. ;
  37.  
  38. : doyerk null ;
  39.  
  40. : check { opPtr mask -- }
  41.     1 mode: opPtr 
  42.                 val" mode is" 
  43.     << mask 
  44.                 val" mask is " 
  45.     and not
  46.     IF
  47.         203 asmError        \ mode and mask do not match
  48.     THEN
  49. ;
  50.  
  51. : CompIdxMode { opPtr -- }
  52.     getpcmode: opPtr dup 8 <
  53.     IF
  54.         drop
  55.         mode: opPtr
  56.     THEN
  57.     CASE
  58.         5 OF
  59.             value: opPtr w,
  60.         ENDOF
  61.         6 OF
  62.             value: opPtr 255 min 0 max
  63.             auxilSize: opPtr 1- 11 << or
  64.             auxReg: opPtr 12 << or
  65.             A/D: opPtr 15 << or
  66.             w,
  67.         ENDOF
  68.         8 OF
  69.             value: opPtr ,
  70.         ENDOF
  71.         9 OF
  72.             value: opPtr w,
  73.         ENDOF
  74.         10 OF
  75.             value: opPtr 255 min 0 max
  76.             auxilSize: opPtr 1- 11 << or
  77.             auxReg: opPtr 12 << or
  78.             A/D: opPtr 15 << or
  79.             w,
  80.         ENDOF
  81.         11 OF
  82.             opSize
  83.             CASE
  84.                 0 OF
  85.                     value: opPtr 255 and w,
  86.                 ENDOF
  87.                 1 OF
  88.                     value: opPtr w,
  89.                 ENDOF
  90.                 2 OF
  91.                     value: opPtr ,
  92.                 ENDOF
  93.             ENDCASE
  94.         ENDOF
  95.     ENDCASE
  96. ;
  97.  
  98. : modeSize { opPtr -- modeSize }
  99.     getpcmode: opPtr dup 8 <
  100.     IF
  101.         drop
  102.         mode: opPtr
  103.     THEN
  104.     CASE
  105.         5 OF  1 ENDOF
  106.         6 OF  1 ENDOF
  107.         8 OF  2 ENDOF
  108.         9 OF  1 ENDOF
  109.         10 OF 1 ENDOF
  110.         11 OF
  111.             opSize
  112.             CASE
  113.                 0 OF 1 ENDOF
  114.                 1 OF 1 ENDOF
  115.                 2 OF 2 ENDOF
  116.                 2 swap
  117.             ENDCASE
  118.         ENDOF
  119.         0 swap
  120.     ENDCASE
  121. ;
  122.